import request from '../../request/index.js'
import wsConnect from '../../utils/ws.js' //ws类
import Tone from '../../utils/tone.js' //背景音效类
import store from '../index.js'
export default {
	state:{
		//ws对象
		ws:null,
		//背景音频控制对象
		toneAudio:null,
		
		// 聊天对象列表
		chatObjectList:[],
		
		
		chatObjectInfo:{//当前聊天对象信息
			chatObjectData:{//聊天对象的基本资料
				
			},
			//与当前聊天对象所有的聊天记录
			chatMessageList:[			
			]
		},
	
	},
	mutations:{
		createToneAudio(state,payload){
			state.toneAudio=new Tone(payload)
		},
			
		setChatObjectList(state,chatObjectList){
			state.chatObjectList=chatObjectList
					
		},
		 setChatObjectData(state,chatObjectData){//保存当前聊天对象的基本资料
			return new Promise(async(resolve,reject)=>{
				state.chatObjectInfo.chatObjectData=chatObjectData
				
				if(state.chatObjectInfo.chatObjectData.id){
				
					await this.dispatch('chat/getChatMessageList')//获取与当前聊天对象的所有消息
				}
				resolve()
			})
		},
		setChatMessageList(state,chatMessageList){//添加当前聊天框的消息
	
			state.chatObjectInfo.chatMessageList=chatMessageList
		},
		
		createWs(state){ //创建ws
			var user=null
			//监听ws返回的消息事件
			var onMsg=(data)=>{
				var res=JSON.parse(data.data)
						
					var data =res.data
					console.log(res)
					if(!data||data.length==0)return 
					data=data[0]
					console.log('收到了',data)
				var {id,send_user_id,time_id,accept_type} = data
					
			if(data.send_user_id==user.id){//判断这条消息的发送者是否为自己 
			
			
			
			//因为群列表和人列表 id可能会重复冲突 所以还需要额外使用accept_type字段具体判断时什么类型得用户聊天 判断这个用户到底是群还是个人
				if(state.chatObjectInfo.chatObjectData.id && state.chatObjectInfo.chatObjectData.id==id && state.chatObjectInfo.chatObjectData.accept_type==accept_type){//判断收到消息的时候是否在与人聊天 并且这个聊天对象 就是 这条消息的聊天对象 
						
					if(state.chatObjectInfo.chatMessageList.some(message => message.time_id==time_id)){
						state.chatObjectInfo.chatMessageList.forEach((msg)=>{
							
							if(msg.time_id==time_id){
								
								msg.ifSendSussess='发送成功'
						
							}
						})
						state.chatObjectInfo.chatMessageList=[...state.chatObjectInfo.chatMessageList]
						
					}else{
						this.commit('chat/setChatMessageList',[...state.chatObjectInfo.chatMessageList,data])//添加到消息列表中
							
					}
					
										
				}
							
				return
			}
			
				
				
				
				
				
			if(state.chatObjectInfo.chatObjectData.id){//如果当前正处于聊天窗口
				
				
				if(id==state.chatObjectInfo.chatObjectData.id &&  state.chatObjectInfo.chatObjectData.accept_type==accept_type){//判断是否为当前正在聊天的用户，如果是则添加到消息框中						
				
					this.commit('chat/setChatMessageList',[...state.chatObjectInfo.chatMessageList,data])
					var newMessageData=state.chatObjectList.find((object)=>object.id==id && object.accept_type==accept_type) //查找该聊天用户
					var index=state.chatObjectList.findIndex((object)=>object.id==id && object.accept_type==accept_type)
					if(newMessageData){//存在该用户则覆盖原来的记录						
						var newChatObjectList=[...state.chatObjectList]		
										
							newMessageData.content=data.content
							newMessageData.create_time=data.create_time
						newChatObjectList.splice(index,1)							
						this.commit('chat/setChatObjectList',[newMessageData,...newChatObjectList])
					}else{//不存在则push进去
				
						if(send_user_id==user.id){
							data.picture=state.chatObjectInfo.chatObjectData.picture
							data.account=state.chatObjectInfo.chatObjectData.account
						}
						this.commit('chat/setChatObjectList',[data,...state.chatObjectList])						
					}
					}else{//如果不是当前聊天用户发送的，则判断该用户是否是新增聊天用户
					
						var newMessageData=state.chatObjectList.find((object)=>object.id==id && object.accept_type==accept_type) //查找该聊天用户
						var index=state.chatObjectList.findIndex((object)=>object.id==id && object.accept_type==accept_type)
						if(newMessageData){//存在该用户则覆盖原来的记录
						// console.log(6.1)
							state.toneAudio.play()//播放消息提示音
							var newChatObjectList=[...state.chatObjectList]		
					
								newMessageData.content=data.content
								newMessageData.create_time=data.create_time
							newChatObjectList.splice(index,1)							
							this.commit('chat/setChatObjectList',[newMessageData,...newChatObjectList])
						}else{//不存在则push进去
						// console.log(6.2)
						state.toneAudio.play('http://119.23.142.49:3031/咳咳咳.mp3')//播放消息提示音
							this.commit('chat/setChatObjectList',[data,...state.chatObjectList])						
						}
					}
				
				}
				else{//不处于聊天窗口，也就是不存在聊天对象
			
			
						// console.log(5)
						var newMessageData=state.chatObjectList.find((object)=>object.id==id && object.accept_type==accept_type)//查找该聊天用户
						var index=state.chatObjectList.findIndex((object)=>object.id==id && object.accept_type==accept_type)
						// console.log(newMessageData)
						if(newMessageData){//存在该用户则覆盖原来的记录
						state.toneAudio.play()//播放消息提示音
						// console.log(5.1)
							var newChatObjectList=[...state.chatObjectList]	
						
								newMessageData.content=data.content
								newMessageData.create_time=data.create_time
							newChatObjectList.splice(index,1)							
							this.commit('chat/setChatObjectList',[newMessageData,...newChatObjectList])
						}else{//不存在则push进去
						// console.log(5.2)
							state.toneAudio.play('http://119.23.142.49:3031/咳咳咳.mp3')//播放消息提示音
							
							this.commit('chat/setChatObjectList',[data,...state.chatObjectList])						
						}
					
				}
			}
			
			request({
				url:'/user/getUserInfo',
				method:'get'
			}).then((res)=>{	
				user= res.data.data
				state.ws=new wsConnect({userId:user.id,onMsg})
			})
			
		}
	},
	actions:{
		getChatObjectList(context){//获取聊天用户列表（包括群和人）
		
			request({
				url:'/user/historyList',
				method:'get'
			}).then(chatObjectList=>{
				context.state.chatObjectList=chatObjectList.data.data.list
				// console.log(context.state.chatObjectList)
				context.commit('createWs')//在获取聊天用户列表之后创建ws
			
				context.commit('createToneAudio',{url:'http://119.23.142.49:3031/dididi.mp3'})
			})
		},
		getChatMessageList(context){ //获取与该对象得所有聊天记录
		
			return request({
				url:'/user/getUserHistory',
				method:'get',
				data:{
					user_id:context.state.chatObjectInfo.chatObjectData.id,
					accept_type:context.state.chatObjectInfo.chatObjectData.accept_type
				}		
			}).then(res=>{	
				// console.log(res)
				context.commit('setChatMessageList',res.data.data)
				return 
			})
		},
		
	},
	namespaced:true
}